package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;

/**
 * @author Fengkai
 * @creat 2023/4/11
 * 题目
 * 小明今年升学到小学一年级，来到新班级后发现其他小朋友们身高参差不齐，然后就想基于各小朋友和自己的身高差对他们进行排序，请帮他实现排序。
 * 输入描述:
 * 第一行为正整数 H 和 N，0<H<200，为小明的身高，0<N<50，为新班级其他小朋友个数。
 * 第二行为 N 个正整数 H1-HN，分别是其他小朋友的身高，取值范围 0<Hi<200（1<=i<=N），且 N 个正整数各不相同。
 * 输出描述:
 * 输出排序结果，各正整数以空格分割。和小明身高差绝对值最小的小朋友排在前面，和小明身高差绝对值最大的小朋友排在最后，如果两个小朋友和小明身高差一样，则个子较小的小朋友排在前面。
 */
public class FindNearHeight {
    public static void main (String[] args) {
        System.out.println(mySort(100, 10, new int[]{95, 96, 97, 98, 99, 101, 102, 103, 104, 105}));

    }

    public static String mySort (int H, int N, int[] nums) {
        TreeMap<Integer, ArrayList<Integer>> integerArrayListTreeMap = new TreeMap<>();
        for (int i = 0; i < nums.length; i++) {
            int abs = Math.abs(nums[i] - H);
            ArrayList<Integer> orDefault = integerArrayListTreeMap.getOrDefault(abs, new ArrayList<>());
            orDefault.add(nums[i]);
            Collections.sort(orDefault);
            integerArrayListTreeMap.put(abs, orDefault);
        }
        StringBuilder stringBuilder = new StringBuilder();
        while (integerArrayListTreeMap.size() != 0) {
            Map.Entry<Integer, ArrayList<Integer>> integerArrayListEntry = integerArrayListTreeMap.pollFirstEntry();
            integerArrayListEntry.getValue().forEach(v -> {
                stringBuilder.append(v + " ");
            });
        }
        return stringBuilder.substring(0, stringBuilder.length() - 1);
    }
}
